package Game;

/**
 * an object of class card represents one of the 52 cards
 * in a standad deck of playing cards. Each card has a suit
 * and a value.
 * 
 */
public class Card 
{
	//codes for the 4 suits
	public final static int SPADES = 0, 
							HEARTS = 1,
							DIAMONDS = 2,
							CLUBS = 3;
	//codes for non-numeric cards.
	public final static int ACE = 1,
							JACK = 11,
							QUEEN = 12,
							KING = 13;
	
	private final int suit;
	private final int value;
	/**
	 * contruct a card with the specified value and suit.
	 * Value must be between 1 and 13. suit must be between
	 * 0 and 3. if the parameters are outside these ranges,
	 * the constructed card object will be invalid
	 * @param theValue
	 * @param theSuit
	 */
	public Card(int theValue, int theSuit)
	{
		value = theValue;
		suit = theSuit;
	}
	/**
	 * return the int that codes for this card's suit
	 * @return
	 */
	public int getSuit()
	{
		return suit;
	}
	/**
	 * return the int that codes for this card's value
	 * @return
	 */
	public int getValue()
	{
		return value;
	}
	/**
	 * return a string representing the card's suit.
	 * if the card's suit is invalid, "??" is returned.
	 * @return
	 */
	public String getSuitAsString()
	{
		switch(suit)
		{
			case SPADES: return "Spades";
			case HEARTS: return "Hearts";
			case DIAMONDS: return "Diamods";
			case CLUBS: return "Clubs";
			default: return "??";
		}
	}
	/**
	 * return a string representing the card's value.
	 * if the caard's value is invalid, "??" is returned.
	 * @return
	 */
	public String getValueAsString()
	{
		switch(value)
		{
			case 1: return "Ace";
			case 2: return "2";
			case 3: return "3";
			case 4: return "4";
			case 5: return "5";
			case 6: return "6";
			case 7: return "7";
			case 8: return "8";
			case 9: return "9";
			case 10: return "10";
			case 11: return "Jack";
			case 12: return "Queen";
			case 13: return "King";
			default: return "??";
		}
	}
	/**
	 * return a string representation of this card, such as
	 * "10 of hearts" or "queen of spades"
	 */
	public String toString()
	{
		return getValueAsString() + " of " + getSuitAsString();
	}
}
